package com.boot.domain;


import com.boot.constant.HttpStatus;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;

@Data
@ApiModel(value = "AjaxResult", description = "返回封装类")
public class AjaxResult<T> {
    private static final long serialVersionUID = 1L;

    /**
     * 状态码
     */
    @ApiModelProperty(value = "状态码")
    public int code;

    /**
     * 提示信息
     */
    @ApiModelProperty(value = "提示信息")
    public String msg;

    /**
     * 数据对象
     */
    @ApiModelProperty(value = "数据对象")
    public T data;

    /**
     * 初始化一个新创建的 AjaxResult 对象，使其表示一个空消息。
     */
    public AjaxResult() {
        this.code = HttpStatus.SUCCESS;
    }

    /**
     * 初始化一个新创建的 AjaxResult 对象
     *
     * @param code 状态码
     * @param msg  返回内容
     */
    public AjaxResult(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 初始化一个新创建的 AjaxResult 对象
     *
     * @param code 状态码
     * @param msg  返回内容
     * @param data 数据对象
     */
    public AjaxResult(int code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        if (ObjectUtils.isNotEmpty(data)) {
            this.data = data;
        }
    }

    /**
     * 初始化一个新创建的 AjaxResult 对象
     *
     * @param data 数据对象
     */
    public AjaxResult(T data) {
        this.code = 200;
        this.msg = "操作成功";
        if (ObjectUtils.isNotEmpty(data)) {
            this.data = data;
        }
    }

    /**
     * 操作已经执行成功，没有返回数据 code=204
     */
    public static AjaxResult resultIsNull() {
        return new AjaxResult(HttpStatus.NO_CONTENT, "操作已经执行成功，没有返回数据", null);
    }

    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static AjaxResult success() {

        return AjaxResult.success("操作成功");
    }

    // /**
    // * 返回成功数据
    // *
    // * @return 成功消息
    // */
    // public static AjaxResult success(Object data) {
    // return AjaxResult.success("操作成功", data);
    // }

    /**
     * 返回成功数据
     *
     * @return 成功消息
     */
    public AjaxResult<T> success(T data) {
        return new AjaxResult(HttpStatus.SUCCESS, "操作成功", data);
    }

    /**
     * 返回成功消息
     *
     * @param msg 返回内容
     * @return 成功消息
     */
    public static AjaxResult success(String msg) {
        return AjaxResult.success(msg, null);
    }

    /**
     * 返回成功消息
     *
     * @param msg  返回内容
     * @param data 数据对象
     * @return 成功消息
     */
    public static AjaxResult success(String msg, Object data) {
        return new AjaxResult(HttpStatus.SUCCESS, msg, data);
    }

    /**
     * 返回错误消息
     *
     * @return
     */
    public static AjaxResult error() {
        return AjaxResult.error("操作失败");
    }

    /**
     * 返回错误消息
     *
     * @param msg 返回内容
     * @return 警告消息
     */
    public static AjaxResult error(String msg) {
        return AjaxResult.error(msg, null);
    }

    /**
     * 返回错误消息
     *
     * @param msg  返回内容
     * @param data 数据对象
     * @return 警告消息
     */
    public static AjaxResult error(String msg, Object data) {
        return new AjaxResult(HttpStatus.ERROR, msg, data);
    }

    /**
     * 返回错误消息
     *
     * @param code 状态码
     * @param msg  返回内容
     * @return 警告消息
     */
    public static AjaxResult error(int code, String msg) {
        return new AjaxResult(code, msg, null);
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    // @Override
    // public AjaxResult put(String key, Object value) {
    // super.put(key, value);
    // return this;
    // }
}
